package com.example;

import com.example.controller.impl.AIControllerImpl;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @Auther: tong
 * @Date: 2023/01/19/22:34
 * @Description:
 */
public class Demo {
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        // 设置父类的字节码对象。即enhancer生成的代理对象为AIControllerImpl的子对象
        enhancer.setSuperclass(AIControllerImpl.class);
        // 设置回调函数
        enhancer.setCallback(new MethodInterceptor() {
            // 使用代理对象执行方法时，都会调用到intercept方法中
            @Override
            public Object intercept(Object o, Method method, Object[] objects /*传入参数的数组*/, MethodProxy methodProxy) throws Throwable {
                // 判断当前调用的方法是不是getAnswer,若是，则进行增强
                if("getAnswer".equals(method.getName())) {
                    System.out.println("方法已增强");
                }
                // methodProxy.invokeSuper(); // 调用父类中对应的方法
                return methodProxy.invokeSuper(o, objects);
            }
        });
        // 生成代理对象
        AIControllerImpl proxy = (AIControllerImpl) enhancer.create();
        System.out.println(proxy.getAnswer("我帅吗"));
    }
}
